home *** CD-ROM | disk | FTP | other *** search
/ Day Cry / Day Cry CD.bin / oh_towns / ippon / ippon08 / roll.c next >
C/C++ Source or Header  |  1994-09-20  |  4KB  |  171 lines

  1. /**********************************************************
  2.     ë±ô]âïü[â`âôü@âAâïâSâèâYâÇò╥        by Makken
  3. **********************************************************/
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <math.h>
  7. #include <egb.h>
  8. #include <snd.h>
  9. #include <dos.h>
  10.  
  11. /**********************************************************
  12.     âRâvâìâZâbâTû│é╡é╠ï@Äφé┼éαô«ì∞ë┬ö\é╔é╖éΘé╜é▀é╠ÉΘî╛
  13. **********************************************************/
  14. #pragma Off(387)
  15. #pragma Off(Floating_point)
  16. #pragma Off(486)
  17.  
  18. /*
  19.     âpâbâhô╟é▌ĵéΦùpé╠ÆΦÉö
  20. */
  21. #define UP        0xfe
  22. #define DOWN    0xfd
  23. #define LEFT    0xfb
  24. #define RIGHT    0xf7
  25. #define TRIGA    0xef
  26. #define TRIGB    0xdf
  27. #define RUN        0xbf
  28. #define SELECT    0x7f
  29.  
  30. #define MIN(X,Y) ((X)<=(Y)?(X):(Y))
  31.  
  32. /**********************************************************
  33.     ò`ëµëµû╩é╠æσé½é│
  34. **********************************************************/
  35. #define DispX 320
  36. #define DispY 240
  37.  
  38. char gwk[1536];
  39. char Head[512];
  40. short Map[256*256];
  41. short CT[256],ST[256];
  42.  
  43. /**********************************************************
  44.     ë±ô]âïü[â`âô
  45. **********************************************************/
  46. void roll(char deg) {
  47.     short dx,dy,sx,sy,tx,ty;
  48.     int x,y;
  49.     _Far short *VRAM;
  50.  
  51.     _FP_SEG(VRAM)=0x0104;
  52.     _FP_OFF(VRAM)=0;
  53.     dx=CT[(-deg)&0xff]; dy=ST[(-deg)&0xff];
  54.     sx=(DispX/2<<8)+dx*(-DispX/2)-dy*(-DispY/2);
  55.     sy=(DispY/2<<8)+dy*(-DispX/2)+dx*(-DispY/2);
  56.     tx=sx; ty=sy;
  57.     for (y=0; y<DispY; y++) {
  58.         for (x=0; x<DispX; x++) {
  59.             *VRAM++=Map[(sy&0xff00)+(sx>>8&0xff)];
  60.             sx+=dx; sy+=dy;
  61.         }
  62.         VRAM+=512-DispX;
  63.         tx=tx-dy; ty=ty+dx;
  64.         sx=tx; sy=ty;
  65.     }
  66. }
  67.  
  68. /**********************************************************
  69.     âüâCâôâïü[â`âô
  70. **********************************************************/
  71. void main(int argc, char *argv[]) {
  72.     int i,j;
  73.     int TiffX,TiffY;
  74.     FILE *fp;
  75.     char deg=0;
  76.     int pad;
  77.  
  78.     /********************************************
  79.         TIFFâtâ@âCâïé╠ô╟é▌ì₧é▌
  80.     ********************************************/    
  81.     if (argc!=2) {
  82.         puts("run386 roll -----.tif");
  83.         exit(1);
  84.     }    
  85.     if ((fp=fopen(argv[1],"rb"))==NULL) {
  86.         puts("TIFFâtâ@âCâïé¬âIü[âvâôé┼é½é▄é╣é±");
  87.         exit(1);
  88.     }
  89.     fread(Head,1,512,fp);
  90.     /*  TIFFâwâbâ_é╠ë≡ô╟  */
  91.     if (*(int *)(Head+0x00)!=0x002a4949 ||
  92.         *(int *)(Head+0x36)!=16 ||
  93.         *(int *)(Head+0x42)!=1) {        
  94.         puts("32768ÉFé╠ö±ê│ÅkTIFFâtâ@âCâïé≡ÄwÆΦé╡é─é¡é╛é│éó");
  95.         exit(1);
  96.     }
  97.     TiffX=*(int *)(Head+0x1e);
  98.     TiffY=*(int *)(Head+0x2a);
  99.     /*  Map[]é╔TIFFëµæ£é≡ô╟é▌ì₧é▐  */
  100.     if (TiffX<256) {
  101.         for (i=0; i<MIN(256,TiffY); i++) {
  102.             fread(&Map[i<<8],2,TiffX,fp);
  103.             for (j=TiffX; j<256; j++) Map[(i<<8)+j]=0;
  104.         }
  105.     } else {
  106.         for (i=0; i<MIN(256,TiffY); i++) {
  107.             fread(&Map[i<<8],2,256,fp);
  108.             fseek(fp,(TiffX-256)*2,SEEK_CUR);
  109.         }
  110.     }
  111.     while (i<256) {
  112.         for (j=0; j<256; j++) Map[(i<<8)+j]=0;
  113.         i++;
  114.     }
  115.     fclose(fp);
  116.     
  117.     /********************************************
  118.         ëµû╩É▌ÆΦ
  119.     ********************************************/
  120.     EGB_resolution(gwk, 0, 10);
  121.     EGB_resolution(gwk, 1, 3);
  122.     EGB_displayPage(gwk, 1, 3);
  123.     EGB_writePage(gwk,1);
  124.     EGB_color(gwk,1,0); EGB_clearScreen(gwk);
  125.     EGB_writePage(gwk,0);
  126.     EGB_displayStart(gwk,0,0,0); EGB_displayStart(gwk,1,0,0);
  127.     EGB_displayStart(gwk,2,2,2); EGB_displayStart(gwk,3,320,240);
  128.     EGB_color(gwk,1,0); EGB_clearScreen(gwk);
  129.  
  130.     /********************************************
  131.         COS,SINé╠âeü[âuâïé≡ì∞ɼ
  132.     ********************************************/
  133.     for (i=0; i<256; i++) {
  134.         CT[i]=cos((float)i*_PI/128)*256;
  135.         ST[i]=sin((float)i*_PI/128)*256;
  136.     }
  137.     
  138.     /********************************************
  139.         Åëè·ëµû╩ò\Ī
  140.     ********************************************/
  141.     roll(0);
  142.     
  143.     /********************************************
  144.         âpâbâhæÇì∞é┼ëµû╩é≡ë±ô]
  145.     ********************************************/
  146.     while (1) {
  147.         SND_joy_in_2(0,&pad);
  148.         if ((pad&0xff)==SELECT) break;
  149.         switch (pad&0xff) {
  150.             case RIGHT:
  151.                 deg++;
  152.                 break;
  153.             case LEFT:
  154.                 deg--;
  155.                 break;
  156.             case UP:
  157.                 deg+=4;
  158.                 break;
  159.             case DOWN:
  160.                 deg-=4;
  161.                 break;
  162.             case TRIGA:
  163.                 deg+=64;
  164.                 break;
  165.             case TRIGB:
  166.                 deg-=64;
  167.                 break;
  168.         }
  169.         if ((pad&0xff)!=0xff) roll(deg);
  170.     }
  171. }